package com.dragon.modules.yuegou.client.wechat_mini.request;

import com.dragon.modules.yuegou.client.wechat_mini.model.ValueWrapper;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import javax.annotation.Nullable;
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * <h1>订阅消息</h1>
 * <p>
 * example:<br>
 * 
 * <pre>
 * <code>
 * {
 *   "touser": "OPENID",
 *   "template_id": "TEMPLATE_ID",
 *   "page": "index",
 *   "data": {
 *      "number01": {
 *          "value": "339208499"
 *      },
 *      "date01": {
 *          "value": "2015年01月05日 12:30"
 *      },
 *      "site01": {
 *          "value": "腾讯微信总部"
 *      } ,
 *      "site02": {
 *          "value": "广州市海珠区新港中路397号"
 *      }
 *   }
 * }
 * </code>
 * </pre>
 * </p>
 * 
 * @author liuwu
 *
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class SubscribeMessageRequest implements Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * 接收者（用户）的 openid
	 */
	@JsonProperty("touser")
	private String toUser;

	/**
	 * 所需下发的模板消息的id
	 */
	@JsonProperty("template_id")
	private String templateId;

	/**
	 * 点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转。
	 */
	@Nullable
	private String page;

	/**
	 * 模板数据
	 */
	private Map<String, ValueWrapper> data;

	/**
	 * 获取接收者（用户）的 openid
	 * 
	 * @return 接收者（用户）的 openid
	 */
	public String getToUser() {
		return toUser;
	}

	/**
	 * 设置接收者（用户）的 openid
	 * 
	 * @param toUser 接收者（用户）的 openid
	 */
	public void setToUser(String toUser) {
		this.toUser = toUser;
	}

	/**
	 * 获取所需下发的模板消息的id
	 * 
	 * @return 所需下发的模板消息的id
	 */
	public String getTemplateId() {
		return templateId;
	}

	/**
	 * 设置所需下发的模板消息的id
	 * 
	 * @param templateId 所需下发的模板消息的id
	 */
	public void setTemplateId(String templateId) {
		this.templateId = templateId;
	}

	/**
	 * 获取点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转。
	 * 
	 * @return 点击模板卡片后的跳转页面
	 */
	public String getPage() {
		return page;
	}

	/**
	 * 设置点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转。
	 * 
	 * @param page 点击模板卡片后的跳转页面
	 */
	public void setPage(String page) {
		this.page = page;
	}

	/**
	 * 获取模板内容，不填则下发空模板。
	 * 
	 * @return 模板内容
	 */
	public Map<String, ValueWrapper> getData() {
		return data;
	}

	/**
	 * 设置模板内容，不填则下发空模板。
	 * 
	 * @param data 模板内容
	 */
	public void setData(Map<String, ValueWrapper> data) {
		this.data = data;
	}

	/**
	 * 设置模板参数
	 * 
	 * @param key   参数key
	 * @param value 参数值
	 */
	public void put(String key, ValueWrapper value) {
		if (data == null) {
			data = new LinkedHashMap<>();
		}
		data.put(key, value);
	}

	/**
	 * 设置模板参数
	 * 
	 * @param key   参数key
	 * @param value 参数值
	 */
	public void put(String key, String value) {
		if (data == null) {
			data = new LinkedHashMap<>();
		}
		data.put(key, new ValueWrapper(value));
	}

}
